package org.crystal.tradecraft.model.binance.market.filter;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.crystal.tradecraft.model.binance.enumeration.FilterType;

/**
 * <h3>NOTIONAL 名义价值</h3>
 * 名义价值过滤器(NOTIONAL)定义了订单在一个交易对上可以下单的名义价值区间.<p>
 *<p>
 * - applyMinToMarket 定义了 minNotional 是否适用于市价单(MARKET)<p>
 * - applyMaxToMarket 定义了 maxNotional 是否适用于市价单(MARKET).<p>
 *<p>
 * 要通过此过滤器; 订单的名义价值 (单价 x 数量; price * quantity) 需要满足如下条件:<p>
 * <ul>
 *     <li>price * quantity <= maxNotional</li>
 *     <li>price * quantity >= minNotional</li>
 * </ul>
 * 对于市价单(MARKET); 用于计算的价格采用的是在 avgPriceMins 定义的时间之内的平均价.<p>
 * 如果 avgPriceMins 为 0; 则采用最新的价格.
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class Notional extends BinanceFilter {

    public Notional() {
        super(FilterType.NOTIONAL);
    }

    private double minNotional;

    private boolean applyMinToMarket;

    private double maxNotional;

    private boolean applyMaxToMarket;

    private int avgPriceMins;
}
